package com.zm.oes.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录检查
 * 1.配置到拦截器要拦截哪些请求
 * 2.把这些配置放在容器中
 *
 * 实现HandlerInterceptor接口
 */
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 目标方法执行之前
     * 登录检查写在这里，如果没有登录，就不执行目标方法
     *
     * preHandle方法：这个方法在请求处理之前被调用。如果它返回true，则请求将继续处理；如果返回false，则请求将被中断，不会继续执行后续的处理（如控制器方法）
     *
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        //检查Cookie：代码首先检查请求中是否有Cookie。如果没有Cookie（即request.getCookies()返回null），则方法返回false，表示请求应被中断
        if(request.getCookies() == null) {
            return false;
        }
        //遍历Cookie：如果存在Cookie，代码将遍历它们以查找名为rb_token的Cookie
        for (Cookie cookie : request.getCookies()) {
            //检查rb_token：如果找到了名为rb_token的Cookie，并且其值非空，那么方法会记录一条success的日志，并返回true，表示请求可以继续处理
            if("rb_token".equals(cookie.getName()) && cookie.getValue() != null && !cookie.getValue().equals("")) {
                log.info("success");
                return true;
            }
        }
        return false;
    }
}
